package com.gagakuai.concurrent;

import java.util.concurrent.TimeUnit;

/*
 * @program: common-starters
 * @description: [定时任务] 执行框架
 * @author: houhong
 * @create: 2023-02-25 22:33
 */
public interface ScheduledExecutorService extends ExecutorService {

    /*
     * 执行一次性的定时任务
     */
    ScheduledFuture<?> schedule(Runnable runnable, long delay, TimeUnit unit);


    /*
     * @param delay
     * @param unit
     * @param callable
     * @return {@link ScheduledFuture<?>}
     * @Author houhong
     * @Description //TODO 执行一次性的定时任务(Callable)
     * @Date 10:35 下午 2023/2/25
     */
   <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit);


    /*
     * @param period 间隔
     * @param initialDelay 初次延时时间
     * @param unit
     * @param command
     * @return {@link ScheduledFuture<V>}
     * @Author houhong
     * @Description //TODO 执行重复性的定时任务：固定周期，从任务初次被触发开始，以后每隔period时间就被触发一次
     * @Date 10:35 下午 2023/2/25
     */
   <V> ScheduledFuture<V> scheduledAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);




    /*
     * @param delay 间隔
     * @param initialDelay 初次延时时间
     * @param unit
     * @param command
     * @return {@link ScheduledFuture<?>}
     * @Author houhong
     * @Description //TODO 执行重复性的定时任务：固定延时，任务下次的开始时间=任务上次结束时间+delay
     * @Date 10:35 下午 2023/2/25
     */
    <V> ScheduledFuture<V> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit);






}